﻿using System;
using System.Diagnostics;
using System.Linq;
using System.Windows.Forms;
using kinokasse.bauteile.contracts.KassenPortal;
using kinokasse.bauteile.contracts.SaalplanView;
using kinokasse.datamodel.contracts;

namespace kinokasse.kassenportal
{
    public partial class WinMain : Form, IKassenPortal
    {
        private string _saalNr = string.Empty;

        public WinMain(ISaalplanView saalplanAnzeigenControl) {
            Trace.TraceInformation("WinMain aufgerufen.");

            InitializeComponent();

            Load += delegate {
                Trace.TraceInformation("Load-Event aufgerufen.");
                Out_LadeSaalplan(_saalNr);
            };

            var saalplanAnzeigenUserControl = (Control)saalplanAnzeigenControl;
            saalPlanPanel.Controls.Add(saalplanAnzeigenUserControl);
            saalplanAnzeigenUserControl.Dock = DockStyle.Fill;
        }

        public void Run(string[] args) {
            Trace.TraceInformation("Run aufgerufen.");

            if (args.Count() >= 1) {
                Trace.WriteLine("Run für SaalNr={0} aufgerufen", args[0]);
                _saalNr = args[0];
            }
            else {
                Trace.WriteLine("Run ohne Parameter aufgerufen, es wird SaalNr=1 wird weitergegeben.");
                _saalNr = "1";
            }

            Application.Run(this);
        }

        public void In_PreisFürGewählteSitze(Preis preisInfo) {
            lblPreis.Text = preisInfo.Summe.ToString();
            lblAnzahl.Text = preisInfo.AnzahlPlätze.ToString();
        }

        public void In_Verarbeitungsfehler(Exception exception) {
            MessageBox.Show(exception.Message);
        }

        public event Action<string> Out_LadeSaalplan;
        public event Action<Vorstellung> Out_PlätzeKaufen;
        public event Action<Vorstellung> Out_BelegungenAktualisieren;

        private void btnKaufen_Click(object sender, EventArgs e) {
            // TODO: Vorstellung auswählbar
            var vorstellung = new Vorstellung("1", "Film", DateTime.Now, _saalNr);
            Out_PlätzeKaufen(vorstellung);
        }

        private void btnAktualisieren_Click(object sender, EventArgs e) {
            // TODO: Vorstellung auswählbar
            var vorstellung = new Vorstellung("1", "Film", DateTime.Now, _saalNr);
            Out_BelegungenAktualisieren(vorstellung);
        }
    }
}